package com.company.mtp.device.api;

import java.util.Map;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 设备信息类
 * 
 * @author mtp
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Device {
    
    /**
     * 设备ID
     */
    private String id;
    
    /**
     * 设备名称
     */
    private String name;
    
    /**
     * 设备类型（Android、iOS、模拟器等）
     */
    private String type;
    
    /**
     * 操作系统版本
     */
    private String osVersion;
    
    /**
     * 设备状态
     */
    private DeviceStatus status;
    
    /**
     * 设备IP地址
     */
    private String ipAddress;
    
    /**
     * 设备端口
     */
    private Integer port;
    
    /**
     * 设备分辨率
     */
    private String resolution;
    
    /**
     * 设备DPI
     */
    private Integer dpi;
    
    /**
     * 设备制造商
     */
    private String manufacturer;
    
    /**
     * 设备型号
     */
    private String model;
    
    /**
     * 设备序列号
     */
    private String serialNumber;
    
    /**
     * 设备API级别（Android设备）
     */
    private Integer apiLevel;
    
    /**
     * 设备UDID（iOS设备）
     */
    private String udid;
    
    /**
     * 当前预约信息
     */
    private ReservationInfo reservation;
    
    /**
     * 设备额外属性
     */
    private Map<String, Object> properties;
    
    /**
     * 设备是否可用
     * 
     * @return 是否可用
     */
    public boolean isAvailable() {
        return status == DeviceStatus.ONLINE && reservation == null;
    }
    
    /**
     * 设备预约信息
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class ReservationInfo {
        /**
         * 用户ID
         */
        private String userId;
        
        /**
         * 预约开始时间
         */
        private long startTime;
        
        /**
         * 预约结束时间
         */
        private long endTime;
        
        /**
         * 预约描述
         */
        private String description;
    }
}